/**  
 * All rights Reserved, Designed By <a href="www.itttq.com" target="_blank">www.itttq.com</a>
 * @date:   2017-07-21 11:42:21
 * @Copyright: 2017 <a href="www.itttq.com" target="_blank">www.itttq.com</a> Inc. All rights reserved. 
 */
package com.itttq.gshop.generic.connector;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.itttq.gshop.domain.po.UserInfoPo;
import com.itttq.gshop.domain.to.IndexStatTo;
import com.itttq.gshop.domain.to.ResultPageTo;

@FeignClient(name= "${gshop.feign.server.pbpm}/user")
public interface IUserInfoConnector {
	/**
	 * 根据条件获取UserInfoPo对象，并返回查询的数据总数
	 * 
	 * @param userInfo
	 * @Author 迷蝶
	 * @return ResultPageTo<UserInfoPo>
	 */
	@RequestMapping("list")
    public ResultPageTo<UserInfoPo> getUserInfos(@RequestBody UserInfoPo userInfo);
	
	/**
	 * 根据条件获取UserInfoPo对象，并返回查询的数据总数
	 * 
	 * @param userInfo
	 * @Author 迷蝶
	 * @return List<UserInfoPo>
	 */
	@RequestMapping("users")
    public List<UserInfoPo> getUsers(@RequestBody UserInfoPo userInfo);
	
	/**
	 * 根据ID获取UserInfoPo对象，并放入redis缓存
	 * 
	 * @param id	只能是数字
	 * @Author 迷蝶
	 * @return UserInfoPo
	 */
	@RequestMapping("/{id}")
	public UserInfoPo getUserInfo(@PathVariable("id")int id);

	/**
	 * 根据OpenID获取UserInfoPo对象，并放入redis缓存
	 * 
	 * @param openId
	 * @Author 迷蝶
	 * @return UserInfoPo
	 */
	@RequestMapping("/{openid}")
	public UserInfoPo getUserByOpenid(@PathVariable("openid")String openid);
	
	/**
	 * 保存UserInfoPo对象，并清除此ID的缓存。<br>
	 * 如果ID存在，则更新对象；ID不存在则插入对象。
	 * 
	 * @param userInfo
	 * @Author 迷蝶
	 * @return UserInfoPo
	 */
	@RequestMapping("/save")
	public Integer saveUserInfo(@RequestBody UserInfoPo userInfo);
	
	/**
	 * 根据ID删除UserInfoPo对象，并清除此ID的缓存。<br>
	 * 
	 * @param id	只能是数字
	 * @Author 迷蝶
	 * @return UserInfoPo
	 */
	@RequestMapping("/del/{id}")
	public Integer delUserInfo(@PathVariable("id")int id);
	
	/**
	 * 获取今天新增用户
	 * 
	 * @Author 迷蝶
	 * @return IndexStatTo
	 */
	@RequestMapping("getUserCountToday")
	public IndexStatTo getUserCountToday();

	/**
	 * 根据手机号判断用户是否存在
	 * 
	 * @param mobile	手机号
	 * @Author 迷蝶
	 * @return boolean	存在则返回true，反之返回false
	 */
	@RequestMapping("exist")
	public boolean exist(@RequestParam("mobile") String mobile);
	
	/**
	 * 用户注册
	 * 
	 * @param user
	 * @Author 迷蝶
	 * @return Integer
	 */
	@RequestMapping("reg")
	public Integer reg(@RequestBody UserInfoPo user);
	
	/**
	 * 根据手机号和密码登录
	 * 
	 * @param mobile	手机号
	 * @param pwd		密码
	 * @param ip			登录IP
	 * @Author 迷蝶
	 * @return UserInfoPo	登录成功则返回登录用户对象，用户名密码错误则返回null
	 */
	@RequestMapping("login")
	public UserInfoPo login(@RequestParam("mobile") String mobile, @RequestParam("pwd") String pwd, 
			@RequestParam("ip")String ip);
	
	/**
	 * 根据手机号更新密码，需要传入手机号、salt和密码
	 * 
	 * @param userInfoPo
	 * @Author 迷蝶
	 * @return Integer
	 */
	@RequestMapping("updatePwdByMobile")
	public Integer updatePwdByMobile(@RequestBody UserInfoPo userInfo);
}